package org.ch03.hw.demo03;

/**
 * 主人可以带 "任意" 动物去逛街
 *
 * 注意：在泛型中，extends 关键字用于设置泛型的边界（指定类型的范围）
 *
 * 语法一： <T extends 接口>
 *     T 为指定接口
 *     T 为指定接口的子接口
 *     T 为指定接口的实现类
 *
 * 语法二： <T extends 类>
 *     T 为指定类
 *     T 为指定类的子类
 *
 *  思考：为什么要设置边界
 *      设置泛型的上限
 * @author ZJL
 * @date 2025-03-25
 */
public class People<T extends ICall> {
    /**
     * 宠物
     */
    private T pet;

    public T getPet() {
        return pet;
    }

    public void setPet(T pet) {
        this.pet = pet;
    }

    /**
     * 逛街
     */
    public void shopping() {
        System.out.println("逛街...");
        // 注意：在编译中无法确定 T 是谁，因此无法调用 call 方法
        // 解决二：设置边界
        // 解决三：反射
        pet.call();
    }
}
